package com.xialing.weblog.common.domain.mapper;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.xialing.weblog.common.domain.dos.VideoCategoryRelDO;

import java.util.List;

/**
 * @author: 夏翎
 * @url: www.xialing.com
 * @date: 2025-09-23
 * @description: 视频分类关联Mapper（可选扩展）
 **/
public interface VideoCategoryRelMapper extends BaseMapper<VideoCategoryRelDO> {

    /**
     * 根据视频 ID 删除关联记录
     * @param videoId 视频ID
     * @return 删除结果
     */
    default int deleteByVideoId(Long videoId) {
        return delete(Wrappers.<VideoCategoryRelDO>lambdaQuery()
                .eq(VideoCategoryRelDO::getVideoId, videoId));
    }

    /**
     * 根据视频 ID 集合批量删除
     * @param videoIds 视频ID列表
     * @return 删除结果
     */
    default int deleteByVideoIds(List<Long> videoIds) {
        return delete(Wrappers.<VideoCategoryRelDO>lambdaQuery()
                .in(VideoCategoryRelDO::getVideoId, videoIds));
    }

    /**
     * 根据分类 ID 查询关联的视频 ID 集合
     * @param categoryId 分类ID
     * @return 视频ID列表
     */
    default List<Long> selectVideoIdsByCategoryId(Long categoryId) {
        // 构建查询条件
        LambdaQueryWrapper<VideoCategoryRelDO> wrapper = Wrappers.<VideoCategoryRelDO>lambdaQuery()
                .select(VideoCategoryRelDO::getVideoId)
                .eq(VideoCategoryRelDO::getCategoryId, categoryId);

        return selectList(wrapper).stream()
                .map(VideoCategoryRelDO::getVideoId)
                .collect(java.util.stream.Collectors.toList());
    }

    /**
     * 根据视频 ID 查询关联的分类 ID
     * @param videoId 视频ID
     * @return 分类ID
     */
    default Long selectCategoryIdByVideoId(Long videoId) {
        VideoCategoryRelDO rel = selectOne(Wrappers.<VideoCategoryRelDO>lambdaQuery()
                .select(VideoCategoryRelDO::getCategoryId)
                .eq(VideoCategoryRelDO::getVideoId, videoId));
        
        return rel != null ? rel.getCategoryId() : null;
    }

    /**
     * 根据分类 ID 统计关联的视频数量
     * @param categoryId 分类ID
     * @return 视频数量
     */
    default Long countByCategoryId(Long categoryId) {
        return selectCount(Wrappers.<VideoCategoryRelDO>lambdaQuery()
                .eq(VideoCategoryRelDO::getCategoryId, categoryId));
    }

    /**
     * 根据分类 ID 删除关联记录
     * @param categoryId 分类ID
     * @return 删除结果
     */
    default int deleteByCategoryId(Long categoryId) {
        return delete(Wrappers.<VideoCategoryRelDO>lambdaQuery()
                .eq(VideoCategoryRelDO::getCategoryId, categoryId));
    }
}

